
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

public class Statistique {
	// class utilitaire pour la generation des stats

	public  ArrayList<Client> cli_liste;

	private long nb_rt,nb_be,nb_data_be,nb_data_rt; // nombre de client par type , et nombre de donnees par type (rt be)

	public  Iterator it ;

	public long total_collisions, traffic_avg_be, traffic_avg_rt;

	public static long nb_clients_actif,nb_clients_inactif,nb_clients_contention;
	

	public Statistique(){

		this.cli_liste = new ArrayList<Client>();

	}

	public void add_clients_statistique(ArrayList<Client> tab){

		System.out.println("adding client_liste to stats...");
		this.cli_liste.addAll(tab);

		this.it = cli_liste.iterator();
	}

	public void display_clients_show_data(){

		while(this.it.hasNext()){ // parcour des clients 
			Client cli = (Client) it.next();

			if(cli.serv_class==1){ // best effort connecte

				this.nb_be++;
				this.nb_data_be=this.nb_data_be+((cli.total_data_received+cli.data_send)/2); // moyenne du debit dl et ul
			}

			if(cli.serv_class==2){ // real time connecte
				
				this.nb_rt++;
				this.nb_data_rt=this.nb_data_rt+((cli.total_data_received+cli.data_send)/2);
			}

			if(cli.serv_class==0 || cli.serv_class==3){
				System.out.println("ta");
			}
			
			else {
				System.out.print("ID :");
				System.out.println(cli.id_conn);

				System.out.print("nb data sent : ");
				System.out.println(cli.data_send); 

				System.out.print("nb data received : ");
				System.out.println(cli.data_received); 

				System.out.print("nb Collision(s) : ");
				System.out.println(cli.nb_collision); 
			}

			this.total_collisions=this.total_collisions+cli.nb_collision;
			
		}
		if(this.nb_be!=0){
			this.traffic_avg_be=this.nb_data_be/this.nb_be;
		}
		else this.nb_data_be=0;
		
		if(this.nb_rt!=0){
			this.traffic_avg_rt=this.nb_data_rt/this.nb_rt;
		}
		else this.nb_data_rt=0;

		System.out.println("");
		System.out.println("************* Statistiques *************");
		System.out.println("--> TOTAL des clients Actifs --> "+"(RT : "+this.nb_rt+") "+"(BE "+this.nb_be+")");
		System.out.println("--> TOTAL des Connexions --> "+nb_clients_actif);

		System.out.println("--> TOTAL des collisions --> "+ Utils.total_collisions);
		System.out.println("--> TOTAL des rejets --> "+ Utils.nb_rejets);

		//---------------------------------------------------
		try {Utils.writeF(Utils.cdmamax+";"+this.traffic_avg_be+";"+this.traffic_avg_rt , "CDMA_debit_moyen");} // Débit moyen BE et RT
		catch (IOException e) {e.printStackTrace();}

		//---------------------------------------------------
		System.out.println("--> Moyenne de traffic pour client BE --> "+ this.traffic_avg_be);

		this.traffic_avg_be=0;
		
		System.out.println("--> Moyenne de traffic pour client RT --> "+ this.traffic_avg_rt);
		
		/**
		 * Statistiques wimax :

ACCES : 
proba de succès
proba de collision
proba de rejet( rejet/demande)
Delai motyen d'acces (temps entre le beb et la prise en charge par la SB)
--------------------------
Transmission + reception :

Debit moyen et delai moyen (pour les BE car c'est constant averc les RT)
Taux de migration (handhover)
		 */
		
	}

}// end class
